package types

import (
	"fmt"
)

func Number() {
	var a int
	var b int32
	var c int64
	var d float32
	var e float64
	fmt.Printf("%p-%p-%p-%p-%p\n", &a, &b, &c, &d, &e)

	a, b, c, d, e = 0, 0, 0, 0, 0
	fmt.Printf("%p-%p-%p-%p-%p\n", &a, &b, &c, &d, &e)
}

func String() {
	// &(*{type}) *{type} 表示一个指向 {type} 类型的指针类型，而最外层的 & 符号表示获取这个类型的空指针（零值）
	/**
	var a int
	b := &a  (b->*int)
	c := &b  (c->**int) 指向 int 类型的零值地址
	*/

	var s string = "123"

	ptr := &s
	fmt.Printf("%p\n", ptr)

	b := ptr
	fmt.Printf("%p\n", b)

	*b = "ffffff"
	fmt.Printf("%s\n", s)
}

// 数组是值类型 可以 == 比较
// map和切片是引用类型
// 未声明的的 指向该类型的空指针

func Collection() {
	// 切片
	/*
		type SliceHeader struct {
			Data uintptr	// 指向具体的底层数组指针   (只声明，未初始化时该值为零值 nil)
			Len int			// 切片的长度
			Cap int			// 切片的容量
		}
	*/
	// a := []int{}

	// 多个未初始化的切片（空切片）指针地址可能是相同的，它们还没有被赋予任何底层数组，所以它们目前指向的是相同的空切片
}
